using System;
using CodePlex.TfsLibrary.ObjectModel;
using Xunit;

namespace CodePlex.TfsLibrary.ClientEngine
{
    public class TfsEngineGetSourceItemTest
    {
        [Fact]
        public void CallsTfsState()
        {
            TestableTfsEngine engine = TestableTfsEngine.Create();
            engine.FileSystem.EnsurePath(@"C:\Foo");
            engine.TfsState.TrackFolder("http://tfsUrl", "$/", @"C:\Foo", 0, 0, SourceItemStatus.Unmodified);
            SourceItem tfsStateItem = engine.TfsState.GetSourceItem(@"C:\Foo");

            SourceItem sourceItem = engine.GetSourceItem(@"C:\Foo");

            Assert.Equal(tfsStateItem.ItemId, sourceItem.ItemId);
            Assert.Equal(tfsStateItem.ItemType, sourceItem.ItemType);
            Assert.Equal(tfsStateItem.LocalChangesetId, sourceItem.LocalChangesetId);
            Assert.Equal(tfsStateItem.LocalItemStatus, sourceItem.LocalItemStatus);
            Assert.Equal(tfsStateItem.LocalName, sourceItem.LocalName);
            Assert.Equal(tfsStateItem.LocalTextBaseName, sourceItem.LocalTextBaseName);
            Assert.Equal(tfsStateItem.RemoteChangesetId, sourceItem.RemoteChangesetId);
            Assert.Equal(tfsStateItem.RemoteItemStatus, sourceItem.RemoteItemStatus);
            Assert.Equal(tfsStateItem.RemoteName, sourceItem.RemoteName);
        }

        [Fact]
        public void NullLocalPath()
        {
            TestableTfsEngine engine = TestableTfsEngine.Create();

            Assert.Throws<ArgumentNullException>(delegate
                                                 {
                                                     engine.GetSourceItem(null);
                                                 });
        }
    }
}